# -*- coding: utf-8 -*-
"""
@Time    : 2024/9/6 16:13 
@Author  : ZhangShenao 
@File    : 7.嵌套函数.py
@Desc    : 嵌套函数

在Python中,可以在函数内部定义函数,称为嵌套函数(Nested Function)
嵌套函数有助于在函数内部组织代码,减少函数的作用域

nonlocal关键字用于在嵌套的函数内部声明变量
以指示该变量不是局部变量也不是全局变量,而是外部函数的局部变量
"""


# 定义外部函数
def outer() -> None:
    """外部函数"""

    # 定义外部函数的局部变量
    x = 10
    print(f"在调用inner()函数前,x = {x}")  # x=10

    # 定义内部嵌套函数
    def inner() -> None:
        # nonlocal关键字用于在嵌套的函数内部声明变量
        # 以指示该变量不是局部变量也不是全局变量,而是外部函数的局部变量
        # 在这里修改x后,对于外部函数也同步生效
        # 如果没有nonlocal修饰,则x仅代表inner函数的局部变量,这里的修改对外部函数不可见
        nonlocal x
        x = 20
        print(f"在inner()函数内部,x = {x}")  # x=20

    # 调用内部嵌套函数
    inner()

    print(f"在调用inner()函数后,x = {x}")  # x=20


if __name__ == '__main__':
    outer()
